生命週期共有 before、after、beforeEach、afterEach 這四個 hook 當作生命週期的方法,命名很直覺、使用上也很直覺。
我剛開始接觸 NightwatchJs 寫時,一個檔案寫一組生命週期,例如 ./test/xxx.js:
module.exports = {
before () { // xxx.js 開始執行時
console.log('start test')
},
beforeEach(browser, done) { // 下面每個 test case 開始時
browser
.maximizeWindow()
done()
},
afterEach(browser, done) { // 下面每個 test case 結束時
done();
},
after(){ // xxx.js 結束執行時
console.log('end test')
}
'A. 測試 ooo 情境': (browser) => {
......
},
'B. 測試 ### 情境': (browser) => {
......
},
}
像這樣,因為還不熟,怕不同檔案的生命週期有所不同。
後來發現生命週期的內容都差不多,真的可以像 官網、部落客 教的,一個專案寫一個生命週期,模組化成一個檔案 (這邊舉例命名為 globals.js )
先在 nightwatch.conf.js 關聯:
const config = {
...
globals_path: './test/globals.js', // 看檔案路徑放哪裡,檔案名稱可自訂
...
}
然後 ./test/globals.js 檔案:
before () { // 當每個 xxx.js 開始執行時
console.log('start test')
},
beforeEach(browser, done) { // 子 test case 開始時
browser
.maximizeWindow()
done()
},
afterEach(browser, done) { // 子 test case 結束時
done()
},
after(){ // 當每個 xxx.js 結束執行時
console.log('end test')
}
之後,要寫 test case 時,就可以省略生命週期的宣告,例如剛才開頭舉例的 ./test/xxx.js 就只剩下簡潔的:
module.exports = {
'A. 測試 ooo 情境': (browser) => {
......
},
'B. 測試 ### 情境': (browser) => {
......
},
}
什麼樣的情況會需要不同的生命週期?目前只想到做不同的視窗大小的測試的話(setWindowSize()),衍生思考是不是可以模組化 RWD 的測試?
目前主要在用 beforeEach 和 afterEach,before 和 after 只拿來用 console.log,不知道有沒有更好地利用?